package com.evil.account.api;

import com.evil.account.config.FeignErrorDecoder;
import com.evil.account.pojo.dto.enterprise.EnterpriseBaseInfoResp;
import com.evil.account.pojo.entity.Enterprise;
import com.evil.common.account.bo.AuthUserBO;
import com.evil.common.account.dto.enterprise.*;
import com.evil.common.account.dto.user.UserBaseRespDTO;
import com.evil.common.core.constant.ServiceNameConstant;
import com.evil.common.core.dto.FindByIdsReqDTO;
import com.evil.common.core.entity.QueryModel;
import com.github.pagehelper.PageInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 企业接口
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
@FeignClient(name = ServiceNameConstant.ACCOUNT_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteEnterpriseService {

    /**
     * 通过企业id查询企业信息
     *
     * @param enterpriseId 企业id
     * @return enterprise
     */
    @PostMapping("/remote/find/enterprise/is-exist-by-id")
    Optional<Enterprise> isExistById(@RequestParam("id") Long enterpriseId);

    /**
     * 通过企业ids查询企业信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return enterprise
     */
    @PostMapping("/remote/find/enterprise/by-ids")
    List<Enterprise> findByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过企业ids查询企业基础信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return enterprise
     */
    @PostMapping("/remote/find/enterprise/by-base-ids")
    List<EnterpriseBaseRespDTO> findBaseByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过企业ids查询企业信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return enterprise
     */
    @PostMapping("/remote/find/enterprise/by-map-ids")
    Map<Long, Enterprise> findMapByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过企业ids查询企业基础信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return enterprise
     */
    @PostMapping("/remote/find/enterprise/by-base-map-ids")
    Map<Long, EnterpriseBaseRespDTO> findBaseMapByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 登录前查询平台信息
     *
     * @return 系统信息
     */
    @PostMapping("/remote/enterprise/login-system/info")
    SystemInfoRespDTO loginSystemInfo();

    /**
     * 当前登录用户企业基础信息
     *
     * @return EnterpriseBaseInfoResp
     */
    @PostMapping("/remote/find/enterprise/login-enterprise-info")
    EnterpriseBaseInfoResp loginEnterpriseInfo();

    /**
     * 查询管理员列表
     *
     * @param queryModel queryModel
     * @return UserBaseRespDTO
     */
    @PostMapping("/remote/enterprise/manager/list")
    PageInfo<UserBaseRespDTO> enterpriseManagerList(@Validated @RequestBody QueryModel<EnterpriseManagerPageReqDTO> queryModel);

    /**
     * 增加/移除企业管理员
     *
     * @param handleEnterpriseManagerReqDTO handleEnterpriseManagerReqDTO
     */
    @PostMapping("/remote/enterprise/manager/handle")
    void handleEnterpriseManager(@Validated @RequestBody HandleEnterpriseManagerReqDTO handleEnterpriseManagerReqDTO);

    /**
     * 修改当前登录用户企业基础信息
     *
     * @param enterpriseReqDTO enterpriseReqDTO
     */
    @PostMapping("/remote/find/enterprise/modify-login-enterprise")
    void modifyLoginEnterpriseInfo(@Validated @RequestBody EnterpriseReqDTO enterpriseReqDTO);

    /**
     * 新增企业
     *
     * @param addEnterpriseReqDTO addEnterpriseReqDTO
     */
    @PostMapping("/remote/enterprise/add")
    void add(@Validated @RequestBody AddEnterpriseReqDTO addEnterpriseReqDTO);

    /**
     * 编辑企业
     *
     * @param modifyEnterpriseReqDTO modifyEnterpriseReqDTO
     */
    @PostMapping("/remote/enterprise/modify")
    void modify(@Validated @RequestBody ModifyEnterpriseReqDTO modifyEnterpriseReqDTO);

    /**
     * 修改企业logo
     *
     * @param modifyEnterpriseLogoReqDTO modifyEnterpriseLogoReqDTO
     */
    @PostMapping("/remote/enterprise/logo/modify")
    void modifyEnterpriseLogo(@Validated @RequestBody ModifyEnterpriseLogoReqDTO modifyEnterpriseLogoReqDTO);

    /**
     * 获取企业列表
     *
     * @param queryModel queryModel
     * @return PageInfo
     */
    @PostMapping("/remote/enterprise/list")
    PageInfo<EnterprisePageRespDTO> page(@Validated @RequestBody QueryModel<EnterprisePageReqDTO> queryModel);

    /**
     * 删除企业
     *
     * @param deleteEnterpriseReqDTO deleteEnterpriseReqDTO
     */
    @PostMapping("/remote/enterprise/delete")
    void delete(@Validated @RequestBody DeleteEnterpriseReqDTO deleteEnterpriseReqDTO);

    /**
     * 切换企业
     *
     * @param enterpriseId enterpriseId
     * @return AuthUserBO
     */
    @PostMapping("/remote/enterprise/switch-login")
    AuthUserBO modifyLoginEnterprise(@RequestParam("enterpriseId") Long enterpriseId);
}
